/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.sac.beans;

import edu.upn.sigemfi.sac.bc.CreditoDelegate;
import edu.upn.sigemfi.rec.be.Credito;
import edu.upn.sigemfi.sac.bc.SolicitudCreditoDelegate;
import edu.upn.sigemfi.sac.be.ProductoSbs;
import edu.upn.sigemfi.sac.be.SolicitudCredito;
import edu.upn.sigemfi.sac.be.SubProducto;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author GABRIEL
 */
public class CreditoController extends AbstractController {

    private CreditoDelegate delegado;
    private SolicitudCreditoDelegate solicitudDelegado;
    private ProductoSbs producto;
    private List<Credito> creditos;

    private List<Credito> vencidos;
    private List<Credito> vigentes;
    private List<Credito> moratorios;

    private List<Credito> vencidosTipo;
    private List<Credito> vigentesTipo;
    private List<Credito> moratoriosTipo;

    private Credito credito;

    public Credito getCredito() {
        return credito;
    }

    public void setCredito(Credito credito) {
        this.credito = credito;
    }
   

    public List<Credito> getCreditos() {
        return creditos;
    }

    public void setCreditos(List<Credito> creditos) {
        this.creditos = creditos;
    }

    public List<Credito> getMoratorios() {
        return moratorios;
    }

    public void setMoratorios(List<Credito> moratorios) {
        this.moratorios = moratorios;
    }

    public List<Credito> getVigentes() {
        return vigentes;
    }

    public void setVigentes(List<Credito> vigentes) {
        this.vigentes = vigentes;
    }


    public ProductoSbs getProducto() {
        return producto;
    }

    public void setProducto(ProductoSbs producto) {
        this.producto = producto;
    }


    public List<Credito> getVencidos() {
        return vencidos;
    }

    public void setVencidos(List<Credito> vencidos) {
        this.vencidos = vencidos;
    }

    

    public CreditoController() {
        delegado = new CreditoDelegate();
        solicitudDelegado = new SolicitudCreditoDelegate();
    }


    public String monitorear(){
        contabilizar();
        try {
            creditos = delegado.todos();
        } catch (Exception ex) {
            Logger.getLogger(CreditoController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
            return "monitoreo";
        }

        return "monitoreo";
    }

    public List<Credito> getMoratoriosTipo() {
        return moratoriosTipo;
    }

    public void setMoratoriosTipo(List<Credito> moratoriosTipo) {
        this.moratoriosTipo = moratoriosTipo;
    }

    public List<Credito> getVencidosTipo() {
        try {
            vencidosTipo = new ArrayList<Credito>();
            for(Credito cre: vencidos){
                    SolicitudCredito sol = solicitudDelegado.buscarPorNroCredito(cre.getIdCredito());
                    if(producto.getIdProductoSbs() ==  sol.getFidSacSubProducto().getFidSacProductoSbs().getIdProductoSbs())
                        vencidosTipo.add(cre);
            }
        } catch (Exception ex) {
            Logger.getLogger(CreditoController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }
        return vencidosTipo;
    }

    public void setVencidosTipo(List<Credito> vencidosTipo) {
        this.vencidosTipo = vencidosTipo;
    }

    public List<Credito> getVigentesTipo() {
        try {
            vigentesTipo = new ArrayList<Credito>();
            for(Credito cre: vigentes){
                    SolicitudCredito sol = solicitudDelegado.buscarPorNroCredito(cre.getIdCredito());
                    if(producto.getIdProductoSbs() ==  sol.getFidSacSubProducto().getFidSacProductoSbs().getIdProductoSbs())
                        vigentesTipo.add(cre);
            }
        } catch (Exception ex) {
            Logger.getLogger(CreditoController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }
        return vigentesTipo;
    }

    public void setVigentesTipo(List<Credito> vigentesTipo) {
        this.vigentesTipo = vigentesTipo;
    }

    public String verCreditoTipo(){
        separarPorTipo();
        return "";
    }

    public String verCreditos(){

        return "verCreditos";
    }

    private void separarPorTipo(){
        
    }

    private void contabilizar(){
        try {
            vencidos = delegado.buscarCreditosVencidos();
            vigentes = delegado.buscarCreditosVigentes();
        } catch (Exception ex) {
            Logger.getLogger(CreditoController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
            return;
        }
        
    }

    public String seleccionar(){
        for(Credito cred: creditos){
            if(cred.getIdCredito() == credito.getIdCredito()){
                mostrarError("Este Credito ya ha sido seleccionado");
                return "";
            }
        }
        creditos.add(credito);
        return "";
    }

    public String quitarCredito(){
        creditos.remove(credito);
        return "";
    }

    public String guardarLista(){
        return "regresar";
    }

}
